home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / TUTORIAL.BIN / Matrix.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-16  |  5.7 KB  |  350 lines

  1. package symantec.itools.awt;
  2.  
  3. class Matrix {
  4.    Matrix rowHead;
  5.    Matrix nextRow;
  6.    Matrix nextElt;
  7.    int row;
  8.    int col;
  9.    // $FF: renamed from: o java.lang.Object
  10.    Object field_0;
  11.    static boolean debug;
  12.  
  13.    public Matrix() {
  14.       this.rowHead = this;
  15.    }
  16.  
  17.    private Matrix(int var1, int var2, Object var3) {
  18.       this(var1, var2, var3, (Matrix)null);
  19.    }
  20.  
  21.    private Matrix(int var1, int var2, Object var3, Matrix var4, Matrix var5, Matrix var6) {
  22.       if (var4 == null) {
  23.          if (var2 != 0) {
  24.             this.rowHead = new Matrix(var1, 0, (Object)null, (Matrix)null, var5, this);
  25.          } else {
  26.             this.rowHead = this;
  27.          }
  28.       } else {
  29.          this.rowHead = var4;
  30.       }
  31.  
  32.       this.row = var1;
  33.       this.col = var2;
  34.       this.field_0 = var3;
  35.       this.nextRow = var5;
  36.       this.nextElt = var6;
  37.    }
  38.  
  39.    private Matrix(int var1, int var2, Object var3, Matrix var4, Matrix var5) {
  40.       this(var1, var2, var3, (Matrix)null, var4, var5);
  41.    }
  42.  
  43.    private Matrix(int var1, int var2, Object var3, Matrix var4) {
  44.       this(var1, var2, var3, (Matrix)null, var4, (Matrix)null);
  45.    }
  46.  
  47.    public void removeAllElements() {
  48.       this.nextRow = null;
  49.       this.nextElt = null;
  50.       this.field_0 = null;
  51.    }
  52.  
  53.    public void addElement(int var1, int var2, Object var3) throws IllegalArgumentException {
  54.       if (debug) {
  55.          this.checkPrecondition(var1, var2);
  56.       }
  57.  
  58.       Matrix var4 = this.nearest(var1, var2);
  59.       if (var4.row != var1) {
  60.          var4.setNextRow((new Matrix(var1, var2, var3, var4.nextRow)).rowHead);
  61.       } else if (var2 == var4.col && var2 == 0) {
  62.          if (var4.field_0 != null) {
  63.             throw new IllegalArgumentException("Element already in Matrix");
  64.          } else {
  65.             var4.field_0 = var3;
  66.          }
  67.       } else {
  68.          var4.nextElt = new Matrix(var1, var2, var3, var4.rowHead, var4.nextRow, var4.nextElt);
  69.       }
  70.    }
  71.  
  72.    void setNextRow(Matrix var1) {
  73.       for(Matrix var2 = this; var2 != null; var2 = var2.nextElt) {
  74.          var2.nextRow = var1;
  75.       }
  76.  
  77.    }
  78.  
  79.    public void updateElement(int var1, int var2, Object var3) {
  80.       Matrix var4 = this.nearest(var1, var2);
  81.  
  82.       try {
  83.          if (var4 == null) {
  84.             this.addElement(var1, var2, var3);
  85.          } else if (var4.row == var1 && var4.col == var2) {
  86.             var4.field_0 = var3;
  87.          } else {
  88.             var4.addElement(var1, var2, var3);
  89.          }
  90.       } catch (IllegalArgumentException var6) {
  91.          ((Throwable)var6).printStackTrace();
  92.       }
  93.    }
  94.  
  95.    Matrix nearest(int var1, int var2) {
  96.       Matrix var3;
  97.       for(var3 = this; var1 > var3.row; var3 = var3.nextRow) {
  98.          if (var3.nextRow == null || var3.nextRow.row > var1) {
  99.             return var3;
  100.          }
  101.       }
  102.  
  103.       while(var3.nextElt != null && var2 >= var3.nextElt.col) {
  104.          var3 = var3.nextElt;
  105.       }
  106.  
  107.       return var3;
  108.    }
  109.  
  110.    public Object elementAt(int var1, int var2) throws NullPointerException {
  111.       Matrix var3 = this.nearest(var1, var2);
  112.       if (var3 != null && var3.row == var1 && var3.col == var2 && var3.field_0 != null) {
  113.          return var3.field_0;
  114.       } else {
  115.          throw new NullPointerException("Element row: " + var1 + " col=" + var2 + " is not in matrix");
  116.       }
  117.    }
  118.  
  119.    public void removeElementAt(int var1, int var2) {
  120.       Matrix var3 = this.nearest(var1, var2);
  121.       if (var3 != null && var3.row == var1 && var3.col == var2) {
  122.          if (var2 == 0) {
  123.             var3.field_0 = null;
  124.          } else {
  125.             Matrix var4;
  126.             for(var4 = var3 = var3.rowHead; var3.col != var2; var3 = var3.nextElt) {
  127.                var4 = var3;
  128.             }
  129.  
  130.             var4.nextElt = var3.nextElt;
  131.          }
  132.       }
  133.    }
  134.  
  135.    public void removeRow(int var1) {
  136.       Matrix var2 = this.nearest(var1, 0);
  137.       if (var2.row == var1) {
  138.          var2 = var2.rowHead;
  139.          var2.field_0 = null;
  140.          var2.nextElt = null;
  141.       }
  142.  
  143.    }
  144.  
  145.    public void insertRow(int var1) {
  146.       Matrix var2;
  147.       if (var1 == 0) {
  148.          var2 = new Matrix();
  149.          var2.setNextRow(this);
  150.       } else {
  151.          var2 = this.nearest(var1 - 1, 0);
  152.          Matrix var3 = new Matrix(var1, 0, (Object)null, var2.nextRow);
  153.          var2.setNextRow(var3);
  154.          var2 = var3;
  155.       }
  156.  
  157.       if (var2.nextRow.row == var1) {
  158.          var2 = var2.nextRow;
  159.  
  160.          while(var2 != null) {
  161.             ++var1;
  162.             var2.updateRowNum(var1);
  163.             var2 = var2.nextRow;
  164.             if (var2.row != var1) {
  165.                return;
  166.             }
  167.          }
  168.       }
  169.  
  170.    }
  171.  
  172.    public void sort(CompareFunc var1, int var2) {
  173.       this.compact();
  174.       boolean var3 = true;
  175.       Matrix var4 = this;
  176.       Object var5 = null;
  177.  
  178.       while(var4 != null) {
  179.          Matrix var6 = this.findLeast(var1, var4, var2, var3);
  180.          if (var6 != null) {
  181.             if (var4.row == 0 && var3) {
  182.                var3 = false;
  183.                this.swapRows(var6);
  184.                var4 = this;
  185.                continue;
  186.             }
  187.  
  188.             this.swapRows(var4, var6);
  189.          }
  190.  
  191.          if (var3) {
  192.             var3 = false;
  193.          } else {
  194.             var4 = var4.nextRow;
  195.          }
  196.       }
  197.  
  198.       this.compact();
  199.    }
  200.  
  201.    Matrix findLeast(CompareFunc var1, Matrix var2, int var3, boolean var4) {
  202.       if (!var4) {
  203.          var2 = var2.nextRow;
  204.       }
  205.  
  206.       if (var2 != null && var2.nextRow != null) {
  207.          Matrix var5 = var2.nextRow.rowHead;
  208.          Matrix var6 = var2.rowHead;
  209.          Matrix var7 = null;
  210.          var2 = var2.nearest(var2.row, var3);
  211.  
  212.          while(var5 != null) {
  213.             var5 = var5.nearest(var5.row, var3);
  214.             if (var5.col != var3) {
  215.                var6 = var5.rowHead;
  216.                var5 = var5.nextRow;
  217.             } else if (var2.col != var3) {
  218.                var2 = var5;
  219.                var7 = var6;
  220.             } else {
  221.                if (var1.lessThan(var5.field_0, var2.field_0)) {
  222.                   var2 = var5;
  223.                   var7 = var6;
  224.                }
  225.  
  226.                var6 = var5.rowHead;
  227.                var5 = var5.nextRow;
  228.             }
  229.          }
  230.  
  231.          return var7;
  232.       } else {
  233.          return null;
  234.       }
  235.    }
  236.  
  237.    protected void swapRows(Matrix var1, Matrix var2) {
  238.       Matrix var3 = var1.nextRow;
  239.       Matrix var4 = var3.nextRow;
  240.       Matrix var5 = var2.nextRow;
  241.       Matrix var6 = var5.nextRow;
  242.       var1.setNextRow(var5);
  243.       var2.setNextRow(var3);
  244.       if (var2 == var3) {
  245.          var5.setNextRow(var3);
  246.       } else {
  247.          var5.setNextRow(var4);
  248.       }
  249.  
  250.       var3.setNextRow(var6);
  251.       int var7 = var3.row;
  252.       var3.updateRowNum(var5.row);
  253.       var5.updateRowNum(var7);
  254.    }
  255.  
  256.    protected void swapRows(Matrix var1) {
  257.       Matrix var2 = var1.nextRow;
  258.       Matrix var3 = new Matrix(-1, var2.col, this.field_0, (Matrix)null, this.nextElt);
  259.       var1.rowHead.setNextRow(var3);
  260.       var3.setNextRow(var2.nextRow);
  261.       var3.updateRowNum(var2.row);
  262.       var3.setRowHead();
  263.       this.nextElt = var2.nextElt;
  264.       this.field_0 = var2.field_0;
  265.       this.setNextRow(this.nextRow);
  266.       this.updateRowNum(0);
  267.       this.setRowHead();
  268.    }
  269.  
  270.    void setRowHead() {
  271.       Matrix var1 = this.nextElt;
  272.  
  273.       for(Matrix var2 = this; var1 != null; var1 = var1.nextElt) {
  274.          var1.rowHead = var2;
  275.       }
  276.  
  277.    }
  278.  
  279.    public void printRow(int var1) {
  280.       Matrix var2 = this.nearest(var1, 0);
  281.       if (var2.row != var1) {
  282.          var2 = var2.nextRow;
  283.          if (var2.row != var1) {
  284.             System.out.println("Row " + var1 + " is not in the matrix");
  285.             return;
  286.          }
  287.       }
  288.  
  289.       System.out.println("-------- Printing row " + var1 + " ----------");
  290.  
  291.       while(var2 != null) {
  292.          System.out.println("Row=" + var2.row + "  Col=" + var2.col + "  value=" + var2.field_0);
  293.          var2 = var2.nextElt;
  294.       }
  295.  
  296.    }
  297.  
  298.    public void compact() {
  299.       int var1 = 0;
  300.       Matrix var2 = this;
  301.       Matrix var3 = null;
  302.  
  303.       while(var2 != null) {
  304.          if (var2.nextElt == null && var2.field_0 == null) {
  305.             var2 = var2.nextRow;
  306.          } else {
  307.             var2.updateRowNum(var1++);
  308.             if (var3 != null && var3.nextRow != var2) {
  309.                var3.setNextRow(var2);
  310.             }
  311.  
  312.             var3 = var2;
  313.             var2 = var2.nextRow;
  314.          }
  315.       }
  316.  
  317.    }
  318.  
  319.    public int rows() {
  320.       this.compact();
  321.  
  322.       Matrix var1;
  323.       for(var1 = this; var1.nextRow != null; var1 = var1.nextRow) {
  324.       }
  325.  
  326.       return var1.row + 1;
  327.    }
  328.  
  329.    private void updateRowNum(int var1) {
  330.       for(Matrix var2 = this; var2 != null; var2 = var2.nextElt) {
  331.          var2.row = var1;
  332.       }
  333.  
  334.    }
  335.  
  336.    MatrixEnumeration elements() {
  337.       return new MatrixEnumeration(this);
  338.    }
  339.  
  340.    public String toString() {
  341.       return "Matrix: row=" + this.row + " col=" + this.col + " o=" + this.field_0;
  342.    }
  343.  
  344.    private void checkPrecondition(int var1, int var2) throws IllegalArgumentException {
  345.       if (var1 < 0 || var2 < 0 || var1 < this.row || var2 < this.col) {
  346.          throw new IllegalArgumentException("Failed precondition check: r=" + var1 + " c=" + var2);
  347.       }
  348.    }
  349. }
  350.